package com.atguigu.gmall.boot.redistemplate.controller;

import com.atguigu.gmall.boot.redistemplate.pojo.User;
import com.atguigu.gmall.boot.redistemplate.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * @author 陈昆昆
 * @version 1.0
 * @date 2020/6/10 21:05
 */
@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    UserService userServiceImpl;

    /**
     * 1，判断当前登录的用户是否被限制登录
     *    1.1如果没有被限制
     *        (执行登录功能)
     *
     * ​   2判断是否登录成功
     *
     * ​          2.1登录成功---->(清除输入密码错误次数)
     *
     * ​          2.2登录不成功
     *
     * ​          3记录登录错误次数
     *
     * ​                              (判断Redis中的登录次数Key是否存在)
     *
     * ​                              3.1如果不存在
     *
     * ​                                        是第一次登录失败次数为1 user:loginCount:fail
     *
     * ​                              3.2如果存在
     *
     * ​                                       查询登录失败次数的key结果
     *
     * ​                                       if(结果<4)
     *
     * ​                                                 user:loginCount:fail+1
     *
     * ​                                       else{//4
     *
     * ​                                            限制登录Key存在，同时设置限制登录时间锁定1小时
     *
     * ​                                       }
     *
     * 1.2如果被限制做出相应的提示
     * @param username
     * @param password
     * @return
     */
    @GetMapping("/login")
    public String login(@RequestParam(value = "username")String username,
                        @RequestParam(value = "password")String password){
        Map<String, Object> map = userServiceImpl.checkUserKey(username);
        if ((boolean) map.get("flag")) {//1.2如果被限制做出相应的提示
            long time = Long.parseLong(map.get("time").toString());
            return "该用户已被限制请在"+time+"分钟之后再次登录";
        } else {  //1.1如果没有被限制 (执行登录功能)
            User user = userServiceImpl.getUser(username, password);
            if (user!=null){ //2.1登录成功---->(清除输入密码错误次数)
                return "登录成功";
            }else{ //2.2登录不成功
                String s = userServiceImpl.checkloginCout(username);
                return s;
            }
        }
    }
}
